/**
 * 部门接口。
 */
var express = require("express");
var router = express.Router();
var Companys = require("../../../../models/Companys.ts");
var _ = require("lodash");
var encrypt = require("../../enoadEncrypt");
var decrypt = require("../../enoadDecrypt");

/**
 * 新录入部门
 */
//@Api(name="/rest/companys/create")
router.post("/companys/create", (req, res) => {
  const body = req.body;
  var comp = new Companys({
    companyName: body.companyName, //公司名称
    companyCap: body.companyCap, //公司缩写
    companyNum: body.companyNum, //所有用户数量
    companyCreateTime: body.companyCreateTime || new Date().getTime(), //创建时间，时间戳
    companyUpdateTime: body.companyUpdateTime || new Date().getTime(), //更新时间，时间戳
  });

  Companys.get(comp.companyName, function (err, camp) {
    if (err) {
      res.send({
        code: 201, // 0 表示处理成功，1 表示处理失败
        msg: "服务器错误，请联系管理员", // 状态的描述
        data: null, // 需要响应给客户端的数据
      });
    } else {
      if (camp) {
        res.send({
          code: 201, // 0 表示处理成功，1 表示处理失败
          msg: "用户名已被占用，请重新输入用户名", // 状态的描述
          data: null, // 需要响应给客户端的数据
        });
      } else {
        //如果不存在
        comp.save(function (err, user) {
          if (err) {
            res.send({
              code: 201, // 0 表示处理成功，1 表示处理失败
              msg: "服务器错误，请联系管理员", // 状态的描述
              data: null, // 需要响应给客户端的数据
            });
          }
          res.send({
            code: 200, // 0 表示处理成功，1 表示处理失败
            msg: "部门创建成功", // 状态的描述
            data: user, // 需要响应给客户端的数据
          });
        });
      }
    }
  });
});

//@Api(name="/rest/companys/update")
router.post("/companys/update", (req, res) => {
  const body = req.body;
  const id = body._id;
  var comp = new Companys({
    companyName: body.companyName, //公司名称
    companyCap: body.companyCap, //公司缩写
    companyNum: body.companyNum, //所有用户数量
    companyCreateTime: body.companyCreateTime || new Date().getTime(), //创建时间，时间戳
    companyUpdateTime: body.companyUpdateTime || new Date().getTime(), //更新时间，时间戳
  });

  //检查用户名是否已经存在
  Companys.update(id, comp, function (err, newDep) {
    if (err) {
      res.send({
        code: 201, // 0 表示处理成功，1 表示处理失败
        msg: "服务器错误，请联系管理员", // 状态的描述
        data: null, // 需要响应给客户端的数据
      });
    } else {
      res.send({
        code: 200, // 0 表示处理成功，1 表示处理失败
        msg: "更新成功", // 状态的描述
        data: newDep, // 需要响应给客户端的数据
      });
    }
  });
});

//@Api(name="/rest/companys/delete")
router.post("/companys/delete", (req, res) => {
  const body = req.body;
  const ids = body.ids || []; //获取需要删除的id组。
  let allPromise = [];
  _.forEach(ids, (id) => {
    allPromise.push(
      new Promise((resolve, reject) => {
        Companys.deleteById(id, (err) => {
          if (err) {
            resolve({ id, status: false });
          } else {
            resolve({ id, status: true });
          }
        });
      })
    );
  });
  Promise.all(allPromise).then((allStaus) => {
    let data = [];
    _.forEach(allStaus, (item) => {
      data.push({
        id: item.id,
        msg: item.status ? "删除成功" : "删除失败",
      });
    });
    res.send({
      code: 200, // 0 表示处理成功，1 表示处理失败
      msg: "操作完成", // 状态的描述
      data,
    });
  });
});

//获取用户所有数据。
//@Api(name="/rest/companys/fetchAllDeparts")
router.post("/companys/fetchAllDeparts", (req, res) => {
  Companys.getAllCompanys((err, all) => {
    if (err) {
      res.send({
        code: 201,
        msg: "服务器错误，请联系管理员",
        data: null,
      });
    } else {
      res.send({
        code: 200,
        msg: "查询成功",
        data: all,
      });
    }
  });
});

module.exports = router;
